/* 
  发布订阅模式
    1. 参与方：微信公众平台、公众号、用户
    2. 用户张三、李四通过公众平台订阅了今日头条
    3. 公众号今日头条在平台上发布了一条新闻--郑州出现彩虹
    4. 张三和李四收到了新闻--郑州出现彩虹

    原理：
      订阅方法，本质是把回调函数提交给了公众平台。
      即回调函数注册到公众平台，回调函数保存到 list。
      发布方法，通知 list 中的回调函数执行。
    因此：公众平台有两个方法，订阅和发布方法。    
*/

// 调度中信(公众平台)(总线)
let bus = {
    list: [], // 保存回调函数
    // 订阅 
    subscribe(callback) {
        console.log(callback);
        this.list.push(callback)
    },
    // 发布
    publish(text) {
        console.log(this.list);
        this.list.forEach((callback) => {
            callback && callback(text)
        })
    },
};

// 张三订阅 
bus.subscribe((value) => {
    console.log('回调函数1', value);
});

// 李四订阅
bus.subscribe((value) => {
    console.log('回调函数2', value);
});

setTimeout(() => {
    bus.publish('郑州出现彩虹了')
}, 1000);

setTimeout(() => {
    bus.publish('天晴了')
}, 1000);